package com.xiatao.utils;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

public class StringUtil {
	public static String get32Uuid(){
		String str="abcdefghijklmnopqrstuvwxyz1234567890";
		StringBuffer s=new StringBuffer();
		for(int i=0;i<32;i++){
			int t=(int)(Math.random()*(str.length()));
			s.append(str.charAt(t));
		}
		return s.toString();
	}
	/**
	 * 获取当前时间
	 */
	public static String getNowTime(){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		return df.format(new Date());
	}
	
	public static Map<String,Object> bean2map(Object bean,Class<?> beanClass) throws Exception{
		Map<String,Object> map = new HashMap<>();
		//获取指定类（Person）的BeanInfo 对象
		BeanInfo beanInfo = Introspector.getBeanInfo(beanClass, Object.class);
		//获取所有的属性描述器
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds){
			String key = pd.getName();
			Method getter = pd.getReadMethod();
			Object value = getter.invoke(bean);
			map.put(key, value);
		}
		return map;
	}
	
	
	//判断对象是否不为空  空返回false，否则返回true
	public static boolean isNotEmpty(Object param){
		if(param==null||"".equals(param)){
			return false;
		}else{
			return true;
		}
	}
	//判断对象是否为空  空返回true，否则返回false
	public static boolean isEmpty(Object param){
		if(param==null||"".equals(param)){
			return true;
		}else{
			return false;
		}
	}
	
	public static String null2empty(Object param){
		if(param==null){
			return "";
		}else if("null".equals(param)){
			return "";
		}else{
			return param.toString();
		}
	}
	
	//遍历map,并将null值置为空
	public static void mapNull2Empty(Map<String,Object> map){
		for (String key : map.keySet()) {
		      if(map.get(key)==null){
		    	  map.put(key, "");
		      }
		}
	}
	//千分位格式话
	public static String fmtMicrometer(String text) {
		DecimalFormat df = null;
		if (text.indexOf(".") > 0) {
			if (text.length() - text.indexOf(".") - 1 == 0) {
				df = new DecimalFormat("###,##0.");
			} else if (text.length() - text.indexOf(".") - 1 == 1) {
				df = new DecimalFormat("###,##0.0");
			} else {
				df = new DecimalFormat("###,##0.0");
			}
		} else {
			df = new DecimalFormat("###,##0");
		}
		double number = 0.0;
		try {
			number = Double.parseDouble(text);
		} catch (Exception e) {
			number = 0.0;
		}
		return df.format(number);
	}
	
	//判断是否为数字(不支持小数点)
	public static boolean isNumeric(String str){
		for (int i = 0; i < str.length(); i++){
			System.out.println(str.charAt(i));
			if (!Character.isDigit(str.charAt(i))){
				return false;
			}
		}
		return true;
	}
	
	//判断是否为数字(支持小数点)
	public static boolean isNumber(String str){
		String reg = "^(-)?[0-9]+(.[0-9]+)?$";
		return str.matches(reg);
	}
	
	//遍历map,并将null值置为空
	public static void mapFmtMicrometer(Map<String,Object> map){
		for (String key : map.keySet()) {
		      if(isNotEmpty(map.get(key))){
		    	  String str=map.get(key).toString();
		    	  if(isNumber(str)){
		    		  map.put(key, fmtMicrometer(str));
		    	  }
		      }
		}
	}
	
	/**
	 * 获取当前时间
	 * @return
	 */
	public static String getNowDate(){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
		String nowData=df.format(new Date());
		return nowData;
	}
	
	/**
	 * 格式话日期
	 **/
	public static String formateDate(String dateString){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
		Date date = null;   
		try {   
	           date = df.parse(dateString);  
		} catch (Exception e) {   
		           e.printStackTrace();   
		}  
		return df.format(date);
	}
	
	/**
	 * 字符串小数点四舍五入保留1位
	 * params:map
	 */
	public static void formateRoundMap(Map<String,Object> map){
		for (String key : map.keySet()) {
		      if(isNotEmpty(map.get(key))){
		    	  String str=map.get(key).toString();
		    	  if(isNumber(str)){
		    		  map.put(key, formateRound(str));
		    	  }
		      }
		}
	}
	
	/**
	 * 字符串小数点四舍五入保留1位
	 * params:string
	 */
	public static String formateRound(String data){
		String formatData="";
		if(isNumber(data)){
			double dd = Double.parseDouble(data);
			formatData= String.format("%.1f",dd);
			return formatData;
		}else{
			return data;
		}
	}

	
}
